<!DOCTYPE html>
<html lang="zh-CN" class="no-js">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width">
	<meta name="keywords" content="GitBlog,kts168的博客">
	<meta name="description" content="由于GitBlog没有数据库，是依靠解析posts文件夹中的markdown文件来展示表客数据的。通常我们写好一篇博客以后，对其进行修改的频率并不高。GitBlog没必要每次访问页面时，都去解析markdown文件。基于这个理由，GitBlog对数据进行了缓存，GitBlog的缓">

	<!--[if lt IE 9]>
	<script src="/theme/default/js/html5.js"></script>
	<![endif]-->
	<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
	
	<title>GitBlog的缓存机制|kts168的博客</title>
	
	<link rel="stylesheet" href="/theme/default/css/genericons.css?ver=2.2" type="text/css" media="all" />
	<link rel="stylesheet" href="/theme/default/css/style.css?ver=2.2" type="text/css" media="all" />
	<link rel="stylesheet" href="/theme/default/css/markdown.css?ver=2.2" type="text/css" media="all" />
	<link rel="alternate" type="application/rss+xml" title="kts168的博客" href="/feed.xml" />
	<!--[if lt IE 9]>
	<link rel="stylesheet" href="/theme/default/css/ie.css?ver=2.2" type="text/css" media="all" />
	<![endif]-->
	<!--[if lt IE 8]>
	<link rel="stylesheet" href="/theme/default/css/ie7.css?ver=2.2" type="text/css" media="all" />
	<![endif]-->
	
	<script type="text/javascript" src="/theme/default/js/jquery/jquery.js?ver=2.2"></script>
	<script type="text/javascript" src="/theme/default/js/jquery/jquery-migrate.min.js?ver=2.2"></script>
	
	<script>
	var _hmt = _hmt || [];
	(function() {
	  var hm = document.createElement("script");
	  hm.src = "//hm.baidu.com/hm.js?732acc76ff6bd41343951a67cbfafe30";
	  var s = document.getElementsByTagName("script")[0]; 
	  s.parentNode.insertBefore(hm, s);
	})();
	</script>
	
</head>

<body>
<div id="page" class="hfeed site">
	<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
	
	    <div id="sidebar" class="sidebar">
	<header id="masthead" class="site-header" role="banner">
		<div class="site-branding">
			<h1 class="site-title"><a href="/" rel="home">kts168的博客</a></h1>
				<p class="site-description">自豪地采用GitBlog</p>
				<button class="secondary-toggle">菜单和挂件</button>
		</div><!-- .site-branding -->
	</header><!-- .site-header -->
	<div id="secondary" class="secondary">
		<div id="widget-area" class="widget-area" role="complementary">
		
			<aside id="categories" class="widget widget_categories">
    <h2 class="widget-title">分类目录</h2>
    <ul>
                <li class="cat-item"><a href="/category/GitBlog.html" >GitBlog</a></li>
            </ul>
</aside>
		    <aside class="widget widget_archive">
    <h2 class="widget-title">文章归档</h2>
    <ul>
        <li><a href="/archive/201507.html">2015-07</a></li>
        </ul>
</aside>
		    <aside id="recent-posts" class="widget widget_recent_entries">
    <h2 class="widget-title">近期文章</h2>
    <ul>
        <li><a href="/blog/install.html">GitBlog安装</a></li>
        <li><a href="/blog/struct.html">GitBlog目录结构</a></li>
        <li><a href="/blog/config.html">GitBlog配置</a></li>
        <li><a href="/blog/edit.html">编写GitBlog博客</a></li>
        <li><a href="/blog/other-func.html">GitBlog评论，订阅，统计等功能</a></li>
        </ul>
</aside>
		    <aside id="tag_cloud" class="widget widget_tag_cloud">
    <h2 class="widget-title">标签</h2>
    <div class="tagcloud">
        <a href="/tags/GitBlog.html" title="GitBlog" >GitBlog</a>
        </div>
</aside>
		    <aside id="text" class="widget widget_text">
    <h2 class="widget-title">简介</h2>	
    <div class="textwidget">
    	<p>GitBlog是一个简单易用的Markdown博客系统，这是我的第一个GitBlog博客</p>
    </div>
</aside>
	    </div><!-- .widget-area -->
    </div><!-- .secondary -->
</div><!-- .sidebar -->  
	    <div id="content" class="site-content">
    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">
        
            <article class="post hentry">
<header class="entry-header">
    <h1 class="entry-title">GitBlog的缓存机制</h1>
</header><!-- .entry-header -->
<div class="entry-content">
<!--
author: jockchou
date: 2015-07-25
title: GitBlog的缓存机制
tags: GitBlog
category: GitBlog
status: publish
summary: 由于GitBlog没有数据库，是依靠解析posts文件夹中的markdown文件来展示表客数据的。通常我们写好一篇博客以后，对其进行修改的频率并不高。GitBlog没必要每次访问页面时，都去解析markdown文件。基于这个理由，GitBlog对数据进行了缓存，GitBlog的缓存有三个层面的实现。
-->
<p>由于GitBlog没有数据库，是依靠解析<code>posts</code>文件夹中的markdown文件来展示表客数据的。通常我们写好一篇博客以后，对其进行修改的频率并不高。GitBlog没必要每次访问页面时，都去解析markdown文件。基于这个理由，GitBlog对数据进行了缓存，GitBlog的缓存有三个层面的实现。</p>
<h2>三层缓存机制</h2>
<p>三层缓存机制由上至下依次是：</p>
<ul>
<li>HTML页面缓存</li>
<li>Twig模板缓存</li>
<li>PHP数据缓存</li>
</ul>
<p>所有的缓存数据都放在<code>app/cache</code>目录中，所以要保证程序有写这个目录的权限，缓存才能生效。下面我们由下至上依次来说明这三层缓存。</p>
<h2>PHP数据缓存</h2>
<p>第一次访问博客时，PHP程序会做解析<code>posts</code>下的markdown博客文件。解析完后全部缓存起来。缓存的文件有：</p>
<pre><code>all_blog.gb     -&gt;所有的博客数据
all_tag.gb      -&gt;所有的博客标签
all_category.gb -&gt;所有的分类信息
all_archive.gb  -&gt;所有的归档月份</code></pre>
<p>些外，按分类，标签，归档访问博客列表时也会对应生成相应的缓存，并且按ID访问分类，标签，博客时也会生成对应的缓存。 这是最底层的缓存，缓存的文件名后缀为<code>.gb</code>。</p>
<h2>Twig模板缓存</h2>
<p>GitBlog采用<a href="http://twig.sensiolabs.org/">Twig</a>模板引擎，Twig是一个轻量，高效，安全的PHP模板引擎。Twig会将html模板块转换成PHP类文件缓存起来。这些模板层级的缓存，主要是针对重复载入拼接模板的优化。</p>
<h2>HTML页面缓存</h2>
<p>这是最上层的缓存机制，GitBlog会将访问过的每一个页面都缓存为一个html文件。下次访问时，直接读取这个html文件。</p>
<p>当你对GitBlog作了改动后，发现没有生效，可以先尝试清除<code>app/cache</code>下的所有缓存文件。比如你上传了新的markdown，希望马上能访问看到，可以这样做。</p>
<h2>2.1新特性</h2>
<p>Gitblog从2.1版本开始，缓存机制在<code>development</code>模式下是不会生成缓存文件的。如果你需要暂时的连续改写markdown文件，可以先切到<code>development</code>模式，避免不停清缓存的麻烦。</p>
<p>修改Gitblog根目录下的index.php文件第一行PHP代码，将ENVIRONMENT参数的值修改为<code>development</code>，如果博客已经稳定发表，强烈建议改成<code>production</code>模式。</p>
<pre><code>define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');</code></pre>
</div><!-- .entry-content --><footer class="entry-footer">
	    <span class="posted-on">
        <span class="screen-reader-text">Posted on </span>
        <time class="entry-date published">2015-07-25</time>
    </span>
		
	    <span class="byline">
        <span class="author vcard">
            <span class="screen-reader-text">Author </span>
            jockchou
        </span>
    </span>
        
        <span class="cat-links">
        <span class="screen-reader-text">Categories </span>
          
           <a href="/category/GitBlog.html" rel="category">GitBlog</a>
            </span>
        
    
        <span class="tags-links">
    	
        <span class="screen-reader-text">Tags </span>
          
           <a href="/tags/GitBlog.html" rel="tag">GitBlog</a>
            </span>
    </footer><!-- .entry-footer --></article><!-- #post-## -->            <div id="comments" class="comments-area">
	<div id="respond" class="comment-respond">
		<div id="disqus_thread"></div>
		<script>
		   var disqus_config = function () {
		   this.page.url = location.href;
		   this.page.identifier = '65c5194107c0e8cae7cbec4b4135fd7d';
		   };
		(function() {
			var d = document, s = d.createElement('script');
			s.src = '//demo-site.disqus.com/embed.js';
			s.setAttribute('data-timestamp', +new Date());
			(d.head || d.body).appendChild(s);
		})();
		</script>
		<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
	</div><!-- #respond -->
</div><!-- .comments-area -->
            
        </main><!-- .site-main -->
    </div><!-- .content-area -->
</div><!-- .site-content -->	    <footer id="colophon" class="site-footer" role="contentinfo">
    <div class="site-info">
        <!--<a href="https://github.com/jockchou/gitblog">Proudly powered by Gitblog</a>-->
    </div><!-- .site-info -->
</footer><!-- .site-footer -->
	
</div><!-- .site -->
<script type="text/javascript" src="/theme/default/js/skip-link-focus-fix.js?ver=2.2"></script>
<script type="text/javascript">
/* <![CDATA[ */
var screenReaderText = {"expand":"<span class=\"screen-reader-text\">\u5c55\u5f00\u5b50\u83dc\u5355<\/span>","collapse":"<span class=\"screen-reader-text\">\u6298\u53e0\u5b50\u83dc\u5355<\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="/theme/default/js/functions.js?ver=2.2"></script>

<link rel="stylesheet" href="//cdn.bootcss.com/highlight.js/8.6/styles/github.min.css">
<script src="//cdn.bootcss.com/highlight.js/8.6/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

<script type="text/x-mathjax-config">MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});</script>
<script type="text/javascript" src="//cdn.bootcss.com/mathjax/2.5.3/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

</body>
</html>
